\section*{Aufgabe 4}

\subsection*{Aufgabenstellung}
Bereinigen Sie die KomponistInnen-Information in der Mediathek
folgendermaßen: Für Tracks, zu denen Sie eine KomponistIn aus der Liste
bestimmen konnten, ersetzen Sie das Feld \glqq{}Composer\grqq{} durch den
\glqq{}normierten\grqq{} Namen aus der Liste; löschen Sie alle Information zu
KomponistInnen aus anderen Feldern des Tracks. Gehen Sie bei der
Aktualisierung von Feldern so vor wie in der Zwischenbemerkung unten
beschrieben, um die Änderungen nachvollziehbar zu halten.

\subsubsection*{Zwischenbemerkung aus der Aufgabenstellung}
In einigen der folgenden Aufgaben sollen Sie einzelne
Felder von Tracks in der Mediathek modifizieren. Die Änderungen, die Sie
vornehmen, sollen aber nachvollziehbar bleiben. Gehen Sie dazu
folgendermaßen vor: Versehen Sie jedes Feld, das Sie ändern wollen, mit einer
UUID und einem Zeitstempel. Kopieren Sie das ursprüngliche Feld
einschließich UUID und Zeitstempel in eine gesonderte Datei, bevor Sie das
Feld aktualisieren. Wenn Sie ein Feld ändern, das schon eine UUID hat,
behalten Sie die UUID bei, aktualisieren Sie den Zeitstempel und fügen Sie das
Feld zusätzlich in die gesonderte Datei ein. Falls Sie ein neues Feld einfügen
wollen, fügen Sie zunächst ein leeres Feld ein, versehen das wie oben mit UUID
und Zeitstempel, schreiben das so angereicherte leere Feld in die gesonderte
Datei und aktualisieren Sie das neue Feld. Es wird nicht vorkmmen, dass Sie
ein Feld löschen.

\subsection*{Lösungsansatz}
Die Eingabe der Mediathek aus Aufgabe 3 und die
Komponistenliste mit UUID's werden von der XQuery verarbeitet und sowohl eine
XML-Datei mit der bereinigten Mediathek als auch ein XML-Datei mit der Historie
der veränderten Tags, erstellt. Dieser Ablauf ist in Abb. \ref{fig:a4_ablauf}
festgehalten. Dort sieht man zusätzlich ein JAVA-Modul, welches eingesetzt
wird, um die Historie zu schreiben. Dieses Modul wurde
eingeführt, da es mit XQuery nicht möglich ist in mehrere
Ausgabedateien zu schreiben.

 \begin{figure}[htbp]
  \centering
  \includegraphics[width = .6\textwidth]{a4_ablauf}
  \caption{Ablaufschema von Aufgabe 4}
  \label{fig:a4_ablauf}
\end{figure}

\subsubsection*{XQuery oder XSLT?}
Aufgrund der Wiederverwendbarkeit von Funktionsteilen aus Aufgabe 3 haben wir
uns sofort für XQuery entschieden. Auch das Einlesen mehrerer Eingabedateien
gestaltet sich mit XQuery sehr einfach. Bei der Bearbeitung der Aufgabe stellte
sich jedoch heraus, dass es mit XQuery nicht möglich ist direkt in zwei
Ausgabedateien zu schreiben. Mit XSLT wäre dies möglich gewesen, allerdings
überwiegen die Zeitersparnisse durch die Wiederverwendung von Programmteilen aus
Aufgabe 3 den Zeitverlust durch das einzuführende JAVA-Modul und rechtfertigen
damit weiterhin die Wahl von XQuery.

\subsection*{Lösung}

\subsubsection*{Programmablauf}
Das Sequenzdiagramm in Abbildung \ref{fig:a4_sequence} zeigt den Ablauf für
jeden Track in der Mediathek. Bereits in Aufgabe 3 wurde festgestellt, dass sich
in den drei Tags \textit{Composer, Album, Name} Informationen zur KomponistIn
befinden können. Zunächst werden die Tags \textit{Album} und \textit{Name}
von Informationen zur KomponistIn bereinigt. Danach wird aus dem
Composers-Container, welcher in Aufgabe 3 erstellt wurde,  ein neues
normiertes Composer-Feld generiert (siehe Abb. \ref{fig:a4_normalizeComp2}). Wenn eines der drei Felder durch die
Bereinigung verändert werden muss, wird das entsprechende alte Feld in die
Historie-Datei geschrieben. Sowohl das neue, als auch das alte Feld werden mit derselben UUID gekennzeichnet und erhalten
zusätzlich noch einen Zeitstempel. 

 \begin{figure}[htbp]
  \centering
  \includegraphics[width = .6\textwidth]{a4_sequence}
  \caption{Sequenzdiagramm für Bereinigung eines Tracks}
  \label{fig:a4_sequence}
\end{figure}

 \begin{figure}[htbp]
  \centering
  \includegraphics[width = .6\textwidth]{a4_normalizeComp2}
  \caption{Erstellung des normierten Composers}
  \label{fig:a4_normalizeComp2}
\end{figure}

\subsubsection*{Ausgabe}
Abbildung \ref{fig:a4_output_history} enthält einen Auszug aus der bereinigten
Mediathek und der Historie. Dort lassen sich gut die Veränderungen dieser
Aufgabe an der Mediathek erkennen.

 \begin{figure}[htbp]
  \centering
  \includegraphics[width = .6\textwidth]{a4_output_history.png}
  \caption{Gegenüberstellung bereinigte Tags $\Leftrightarrow$ alte Tags }
  \label{fig:a4_output_history}
\end{figure}





%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "../documentation"
%%% End: 
